home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230B / NEW2TN2.30 < prev    next >
Encoding:
Text File  |  1997-09-14  |  62.3 KB  |  1,351 lines

  1.   TNOS Release Notes - Release 2.30
  2.   Brian A. Lantz, brian@lantz.com
  3.   v1.00, 14 September 1997
  4.  
  5.   These are the FINAL Release Notes for release 2.30 of TNOS.  Hope-
  6.   fully, this list of changes will give you an idea of the scope of work
  7.   that has occured since the release of TNOS 2.22.
  8.   ______________________________________________________________________
  9.  
  10.   Table of Contents:
  11.  
  12.   1.      Important Notes
  13.  
  14.   2.      Bug Fixes
  15.  
  16.   3.      Improvements and Enhancements
  17.  
  18.   4.      Minor Changes
  19.  
  20.   5.      Remaining Known Bugs
  21.  
  22.   6.      To-Do List
  23.  
  24.   7.      Known Quirks
  25.   ______________________________________________________________________
  26.  
  27.   1.  Important Notes
  28.  
  29.   The following are important notes that you CANNOT afford to ignore:
  30.  
  31.   o   The 'ftpusers' file has been renamed to 'security'
  32.      While still located in the 'etc' directory off of your TNOS root
  33.      directory, the name has been changed to better describe its usage
  34.      and to prevent newbies from believing that it is just important to
  35.      the FTP server.
  36.  
  37.   o   The statistics files now are stored in binary format
  38.      If you have NOT been using the 'stats' commands or you do not have
  39.      the 'STATS' flag compiled into your TNOS, you can ignore the rest
  40.      of this item.
  41.      If you do not need to preserve your existing statistics, you can
  42.      simply delete all of the files in the 'spool/stats' directory
  43.      before starting up Release 2.30 for the first time, or you can
  44.      leave the files there, though they will never be used by TNOS 2.30
  45.      and greater.
  46.      The new binary stats files are named the same, except that they
  47.      have a '.dat' file extension added.
  48.      To convert existing ASCII statistics files to binary ones, use the
  49.      new 'statconv' utility. Do the following commands in your
  50.      'spool/stats' directory:
  51.  
  52.              statconv import area area area.dat
  53.              statconv import forward forward forward.dat
  54.              statconv import message message message.dat
  55.              statconv import traffic traffic traffic.dat
  56.              statconv import usage usage usage.dat
  57.  
  58.   o   The '>' character is now a special character in command lines
  59.      This only applies to commands entered from the Command Session,
  60.      those commands in your 'autoexec.nos' file, and commands you might
  61.      have in optional script files that you 'source' in.
  62.      Since the '>' is now used for output redirection, you must change
  63.      the '>'s in these commands to '\>', to 'escape' the '>', and
  64.      prevent it from being interpreted as a special character. Also, the
  65.      parameter that contains the '\>' should either be enclosed in
  66.      quotes or {}'s,
  67.  
  68.   o   Either follow the 'readme', or do a 'build-make.inc'
  69.      If you are building your own TNOS under Unix, you MUST have a new
  70.      'make.inc' file. Running the 'build-make.inc' script will create
  71.      the new one for you, and will name any existing 'make.inc' file to
  72.      'make.inc.old', in case you have customizations that you'd like to
  73.      add to the generated 'make.inc' file.
  74.      This set also creates the new 'system.h' file.
  75.  
  76.   2.  Bug Fixes
  77.  
  78.   The following bugs have been squashed.
  79.  
  80.   o   Fixed a very obscure bug with XFWDing
  81.      Only affected XFWDing connections with areas using the 'rewrite
  82.      address' functionality for the area. A rare combination. Released a
  83.      quick patchkit.1 to release 2.22 to fix this, just in case others
  84.      needed it.
  85.  
  86.   o   Fix for MSDOS packet driver for short packets
  87.  
  88.   o   Fixes for FBB/X forwarding to prevent rare looping
  89.      If an FBB forwarding session was active, and all messages in the
  90.      queue were deferred by the remote side, the code would re-loop
  91.      continually.  While this is a rare condition, it was nonetheless
  92.      annoying when it occurred.
  93.  
  94.   o   Fixed an inconsistency with 'if' command when expression is false
  95.  
  96.   o   Fixed MSDOS FTP 'pwd' buglet
  97.  
  98.   o   Fixed MSDOS FTP 'lcd' buglet (also affected 'cd' command)
  99.  
  100.   o   The above included in 2.22pl2
  101.  
  102.   o   Fixed problem where areas files required space even w/out
  103.      description
  104.  
  105.   o   Fixed problem preventing FBB telnet hack from working
  106.  
  107.   o   Fixed problem w/overly aggressive chopping of haddresses when
  108.      forwarding
  109.  
  110.   o   Fixed a remaining problem w/MSDOS packet driver and short packets
  111.  
  112.   o   Fixed incorrect number of lines in command session flowmode
  113.  
  114.   o   Fixed a RARE buffer overflow on MBL-style forwarding and long
  115.      haddresses
  116.  
  117.   o   Fixed (??) the 'Invalid Gateway' entries and PBBS users exceeding
  118.      tdisc
  119.  
  120.   o   Changed few remaining C++-style comments to C-style
  121.  
  122.   o   Fixed occasional crash if HTTP received from unresolvable address
  123.  
  124.   o   Fixed a bug where ping responses to the console where not
  125.      displayed
  126.  
  127.   o   Fix for preventing attempted forwarding of messages w/out BID/MID
  128.  
  129.   o   Fixed occasional false pings of negative rtt
  130.      These were only observed in TNOS/DOS under the Linux DosEmu, but
  131.      could have occurred in other environments as well.
  132.  
  133.   o   Fixed problem with smtp mqueue parsing in Win95 Dosbox
  134.      This would cause a 'smtp list' display to scroll continually, and a
  135.      'smtp kick' to not work.
  136.      Seems that DJGPP is close but not exact on their implementation of
  137.      the findfirst/findnext functions (at least the release of DJGPP
  138.      that I use; later release may have fixed this). While the return
  139.      value is supposed to be zero for success, and -1 for failure, the
  140.      DJGPP version uses 0 for success and non-zero for failure.
  141.      The existing code looked for -1, and otherwise assumed success.
  142.      This has been changed, and seems to fix the problem.
  143.      This was hard to find, because the DJGPP library was not consistent
  144.      in its return values, and under DosEmu and pure MSDOS, it worked as
  145.      expected. In a Win95 Dosbox, though, it was broken.
  146.      This same bug would also cause the Command Session 'copy' and
  147.      'delete' commands to not work properly. While many pieces of code
  148.      use the findfirst/findnext functions, only these needed changing.
  149.  
  150.   o   Fixed TNOS/DOS bug with session flow control
  151.  
  152.   o   Fixed assorted conditionals that prevented not setting ALLSERV
  153.  
  154.   o   Fixed where the '-S' and '-T' command line parameters were getting
  155.      trashed
  156.  
  157.   o   Fixed HTTP problem where directory contents not properly displayed
  158.  
  159.   o   Fixed HTTP problem where sub-directory listed as files in
  160.      directory listings
  161.  
  162.   o   Fixed HTTP problem where directory files were always converted to
  163.      lowercase
  164.  
  165.   o   Fixed several potential domain lookup problems
  166.      This was due to several places not checking the return value from
  167.      the getpeername and getsockname functions.
  168.  
  169.   o   Long-standing problem identified (and fixed?)
  170.      There has been a mysterious problem where TNOS has at times 'lost'
  171.      active processes. This has mainly been noticed by occasionally
  172.      having the statusline daemon go inactive.
  173.      There seems to be some problem with the handling of the process
  174.      tables, when a processes is in 'waiting' state. The changes made
  175.      here will hopefully fix the problem. Only time will tell...
  176.  
  177.   o   Added code to detect/prevent corrupted process table entries
  178.  
  179.   o   Added code to prevent race condition adding Converse users/groups
  180.  
  181.   o   Fixed truncated names of built-in fingerd 'users'
  182.  
  183.   o   Fixed bug with PBBS 'sf' and no header data
  184.  
  185.   o   Fixed XFWD bug when all incoming msg in a proposal are refused
  186.  
  187.   o   Fixed XFWD bug with handling the reject.dat file
  188.      This was obscure, as it only occurred with BIDS starting with 'S'
  189.      or 'F'.
  190.  
  191.   o   All the above included in 2.30b1
  192.  
  193.   o   Fixed output redirection '>' to be ignore in comment lines
  194.  
  195.   o   Fixed bug where AXUI would not receive frames w/remaining digi's
  196.  
  197.   o   Fixed command parser to ignore special characters in comment lines
  198.      This includes quotes, braces, backslash, and semi-colon. Now, a
  199.      comment line (starting with a '#') cause the rest of the line to be
  200.      discarded and not interpreted specially. You can place a comment at
  201.      the end of a command (preceeded by a semi-colon), but NOT the
  202.      reverse. Once a comment is started, no processing is done of the
  203.      rest of the line.
  204.  
  205.   o   Fixed an obscure bug with 'pbbs nosubjbell'
  206.  
  207.   o   Changed some of the timer code to prevent possible problems
  208.  
  209.   o   Fixed problem w/'repeat' command not clearing screen each pass
  210.  
  211.   o   Fixed problem w/look command and the 'chat' subcommand
  212.  
  213.   o   Fixed a typo in config.chk, which caused contention between
  214.      POP/POP3
  215.      Only happened if you didn't define POP3CLIENT.
  216.  
  217.   o   Fixed problem where PBBS users could access Converse server, even
  218.      when it was off
  219.  
  220.   o   Fixed assorted potential buffer overflow sections of code
  221.  
  222.   o   Fixed added <LF> after remote messages received in Converse Server
  223.  
  224.   o   Fixed Converse problem where channel 32767 was always treated
  225.      correct
  226.  
  227.   o   Killed one gremlin ;-) Now delete all timers owned processes when
  228.      killed
  229.      Previously, only the alarm timer was stopped (i.e. deleted from the
  230.      queue), which was (I am SURE) at times causing occasional
  231.      weirdness, as the process started by the expired timer (and the
  232.      data it pointed to) were no longer what/where it was when the old
  233.      process was alive.
  234.      This would have previously left a 'loaded gun' timer each time that
  235.      a user of the PBBS was gateway'ed out to a remote site, and they
  236.      timed out due to their inactivity. While the inactivity timer was
  237.      removed from the timer queue when it expired, the separate timer on
  238.      the gateway was NOT removed.
  239.      Timers for AX25/TCP links may also have (at times) fell through the
  240.      cracks and been left enabled long after the process that started it
  241.      completed.
  242.      Doubtless not the LAST gremlin, but definitely this one was a
  243.      player ;-)
  244.  
  245.   o   Changed the internal way that processes are added to process
  246.      tables
  247.      This, in addition to being faster will prevent the possibility of
  248.      getting tied up in a loop trying to add a process to a process
  249.      table. Now, in addition to a pointer to the head of the linked
  250.      list, we now also keep a pointer to the tail of the list. Adding to
  251.      the end of the list is a simple, quick event, now.
  252.  
  253.   o   Fixed minor problem with PBBS 'sr' command and some mini-editor
  254.      commands
  255.  
  256.   o   All the above included in 2.30b2
  257.  
  258.   o   Fixed problem with 'review' command not saving area changes
  259.  
  260.   o   Fixed minor compilation combinations with certain features
  261.      disabled
  262.  
  263.   o   Fixed a minor problem with 'pbbs strictcall' and MBL forwarding
  264.  
  265.   o   Fixed a minor cosmetic problem with buildcat
  266.  
  267.   o   A fix for an obscure 'ax25 smartroute' problem
  268.  
  269.   o   Fixed case where FBB forwarding would report false protocol errors
  270.      This would happen when you had an outbound FBB proposal which the
  271.      other side rejected all of the messages from, and then the other
  272.      side had data to send to you. At times, the first line of the
  273.      remote's proposal was getting improperly eaten, causing the
  274.      proposal's checksum to be bad.
  275.  
  276.   o   Minor fix to build-make.inc script for older ncurses
  277.  
  278.   o   Fixed problem with 'look' not always seeing disconnected user
  279.  
  280.   o   Fixed two problems by checking for catalog file in startup
  281.  
  282.   o   Fixed a problem with setting the 'wp clientcall'
  283.  
  284.   o   Fixed 80 column 3rd status line with >80 column displays
  285.  
  286.   o   All the above included in 2.30b3
  287.  
  288.   o   Fixed a timer bug, added in earlier beta code
  289.  
  290.   o   Fixed new 132 column 3rd status line bug
  291.  
  292.   o   All the above included in 2.30b4
  293.  
  294.   o   Fix for backspace (and column 0) with displays > 80 columns
  295.  
  296.   o   Fixed a problem with scripted forwarding sessions
  297.      Don't know when this one crept in, but the first line of a
  298.      forwarding script would (at times) be sent twice, and cause
  299.      difficulties at the AX.25 level. This probably is related to the
  300.      timer changes in this release, but it may have existed in pre-2.30
  301.      releases.
  302.  
  303.   3.  Improvements and Enhancements
  304.  
  305.   The following optimizations and improvements have occurred.
  306.  
  307.   o   Converted statistics files from ascii to binary
  308.      This increases loading/saving speed, reduces the chance of
  309.      corruption, and uses less disk space.
  310.  
  311.   o   Added new 'statconv' executable
  312.      This executable can be used to import existing ascii statistics
  313.      files, converting to the new binary format. It can also be used to
  314.      export a binary file into the old ascii format, which is only
  315.      useful for debugging purposes.
  316.  
  317.   o   Added a 'AH' PBBS sysop command, to display only areas with held
  318.      messages
  319.  
  320.   o   Added a command session 'pbbs holdsummary' command
  321.      This gives the same output as the PBBS 'AH' command, without
  322.      requiring the sysop to logon to get this information.
  323.   o   Added a 'review' PBBS sysop command for reviewing of held messages
  324.      This command displays all held messages, then area-by-area,
  325.      message-by-message allows you to list the message, view the message
  326.      with headers, release the message from hold, skip the message
  327.      (retaining the hold), kill the message, skip to the next area, mark
  328.      all messages in this area available, or quit the review process.
  329.      The '?' command displays command summary.
  330.  
  331.   o   Added a 'pbbs scan <username>' command
  332.      This is the same as logging into the PBBS as 'username', and then
  333.      doing a 'quickscan' command. Simply added for the convenience of
  334.      the sysop.
  335.  
  336.   o   Added a 'smtp rewritecheck' command
  337.      This allows you to easily check the rewrite rules for a given
  338.      address.  The 'smtp rewritetrace' flag is forced to on (regardless
  339.      of its current setting) during the resolution of this rewrite
  340.      tracing, and returned to its original setting once complete. Note,
  341.      that if this command is accessed remotely that the rewritetrace
  342.      intermediate info will not be displayed, as this is always
  343.      displayed on the Console.
  344.  
  345.   o   Changes, as needed, for compilation on Solaris 2.5 and IRIX 6.2
  346.      Now TNOS compiles off the shelf for SGI's Irix (tested with 6.2)
  347.      and for Sun's Solaris (tested with 2.5). It will use the native
  348.      OS's curses, but it is NOT as full-featured as NCURSES, so not all
  349.      curses-related features work unless you use NCURSES.  Highly
  350.      functional, though....
  351.      The IRIX 6.2 compile was tested on 5.3 and 6.4 and runs fine. The
  352.      Solaris 2.5 compile was tested on 2.3 and it also runs fine.
  353.      Other versions of both Solaris and IRIX will probably also compile
  354.      TNOS now without modification, but only the above listed
  355.      configurations have been tested.
  356.  
  357.   o   Extensive improvements on self-configuration for Unix
  358.      The build-make.inc script (which creates the default make.inc file)
  359.      has been extensively enhanced to automatically setup TNOS for most
  360.      any Unix.  Several source files have had minor changes made to them
  361.      to support this enhanced capability.
  362.  
  363.   o   Changed nearly ALL Unix/OS-specific code to feature-driven code
  364.  
  365.   o   Removed the need for TNOS/DOS users to find/install a DPMI manager
  366.      From now on, the TNOS/DOS executables distributed from lantz.com
  367.      will have a build-in DPMI manager. This DPMI manager (PMODE) does
  368.      NOT support virtual memory, but does allow you to use all of the
  369.      available physical memory in the machine. No special considerations
  370.      need to be made. Just run the executable.
  371.      If these executables are run in the presence of an existing DPMI
  372.      manager, the PMODE code steps aside, using the better DPMI manager.
  373.      Those who need to use virtual memory will want to use a DPMI
  374.      manager that supports virtual memory.
  375.  
  376.   o   Added a Command Session command, 'timers'
  377.      Primary will be used by the author as a diagnostic tool, this
  378.      command displays the current contents of the timer queue, showing
  379.      the process owning the timer, the timer's state and duration, and
  380.      the time that the timer should next 'kick'.
  381.  
  382.   o   Added a 'http ftpdir' command
  383.      This command sets the default FTP directory to use with URL's
  384.      starting with '/ftp/'. If this is undefined (the default), then
  385.      URL's starting with '/ftp/' will refer to a subdirectory within the
  386.      normal http directory, using the normal methods of access.
  387.      If the 'http ftpdir' is defined (or given on the 'start http'
  388.      command line) then all URL's starting with '/ftp/' will be based
  389.      out of the directory given. In addition, all files served within a
  390.      defined ftpdir will display directory listings without the need of
  391.      a 'welcome.html' file, bypassing this normal security step in the
  392.      HTTP server.
  393.  
  394.   o   Added ability to attach 'dummy' interfaces
  395.      This is useful for allowing TNOS to assume multiple IP addresses.
  396.      The command is 'attach dummy <label> <ipaddr>'.
  397.  
  398.   o   Added back a new version of the 'fstat' command
  399.      The original 'fstat' command was a MSDOS-specific command, and was
  400.      never in the UNIX version of TNOS. For consistency it was removed
  401.      from the MSDOS version when the DJGPP port was done.
  402.      This version gives a little more information, and is OS-
  403.      independent. It is done by putting a wrapper function around the
  404.      standard fopen/fclose/tmpfile functions, saving information about
  405.      the file into a table, then calling the real version of the desired
  406.      function.
  407.      The output of the 'fstat' command gives the name of the process
  408.      owning the file, the time it was opened, the file's length and
  409.      current position, the access mode that the file was opened with,
  410.      and the file's name.
  411.      These changes also has the benefit of preventing files opened by a
  412.      process from remaining open after the process completes, as now in
  413.      the killproc function all open files of a process are closed. There
  414.      were a couple of places discovered that opened files using the
  415.      tmpfile function, and could exit the process without closing them.
  416.      Rather than check/change all occurances in the code, I just added
  417.      this code in killproc, which emulates the way that C handles open
  418.      files with normal processes.
  419.  
  420.   o   Added code to attempt to prevent needless restarts
  421.      If a spuratic SIGSEGV signal is received (and DUMP_CORE is not
  422.      defined), then the UNIX version will attempt to recover and
  423.      continue TNOS, rather than exiting. The resume event will be logged
  424.      to the logfile (if active) and will be displayed to the Command
  425.      Session screen.  This resuming will only be allowed to be attempted
  426.      up to defined number of times per execution of TNOS, so that a
  427.      persistent error will cause an exit, eventually. Currently the
  428.      default is to allow up to 20 resumes.
  429.      The recovery method varies depending on the process that
  430.      encountered the error. If it is one of the required Daemon
  431.      processes or it is one of the servers started with a 'start'
  432.      command, then they are restarted from the beginning, with the same
  433.      parameters that they initially were started with. If the process
  434.      was not a Daemon or a server, then we simply kill the running TNOS
  435.      process.
  436.      The number of times the TNOS kernel has resumed (and the current
  437.      number of times that a resume will be allowed) can be found in the
  438.      output for the 'kstat' command. Also this display shows how many
  439.      times (of those times that a resume occurred) that a Daemon or
  440.      server was restarted.
  441.      Note: no attempt to resume is made if the process that encountered
  442.      the SIGSEGV was the Command Session.
  443.  
  444.   o   Added an 'attach kernel' command for TNOS/Unix under Linux
  445.      This (taken from wampes and modified extensively for TNOS) allows
  446.      you to attach directly into the Linux kernel's protocol stack, and
  447.      is primarily used to interface with Linux ax25 devices or to
  448.      connect to Linux applications written to utilize the Linux kernel
  449.      ax25 devices. Experimental, and not yet tested!
  450.      I have began an attempt to use the same method to eliminate the
  451.      need to use a slip pseudo-tty to communicate with the kernel,
  452.      instead sending the IP frames to the kernel protocol stack
  453.      directly. At this point it can communicate with everything
  454.      downlink, but not TO the kernel, itself, when connected to the
  455.      ethernet device. Also getting stray duplicate packets.
  456.  
  457.   o   Redirection of Command Session output added
  458.      Now any Command Session command can be followed with a '>filename'
  459.      to redirect output from the command to that file. Well, not really
  460.      redirect, as you still get the output on the console. What is
  461.      really being done behind the scenes is the equivalant to doing a
  462.      'record filename' to the Command Session for the course of that
  463.      command. (Note, you cannot do a 'record' command to the Command
  464.      Session, as it is not a normal session.
  465.      This also works with multiple commands on the same command line,
  466.      though each separate command (at this time) would need it's own
  467.      redirection, if that is what is desired, as there is no way to
  468.      combine several commands output together.
  469.      For example, to place the output of the 'ps' and 'socket' commands
  470.      to a file named 'data', you could do either:
  471.  
  472.              ps >data
  473.              socket >data
  474.  
  475.   or you could do the same thing with:
  476.  
  477.           ps >data ; socket >data
  478.  
  479.   o   Added commands to set a security profile's password
  480.      Added the Command Session 'profile passwd' and PBBS 'passwd'
  481.      commands.  These allow the sysop to change a passwd for a user,
  482.      without having to manually edit the 'security' file.
  483.      In addition, a user can (under certain circumstances) change their
  484.      own passwd without requiring sysop intervention. This can only be
  485.      done if:
  486.  
  487.      1.  The user is in the 'security' file
  488.         This means that anonymous users cannot set passwords.
  489.  
  490.      2.  The user was authenticated with a password
  491.         This means that they either connected by telnet, or the system
  492.         has the 'pbbs ax25password' command set to always authenticate
  493.         users.
  494.  
  495.      Users with 'sysop' permissions can change any users' password, but
  496.      only from the Command Session, or if they logged in, authenticated
  497.      with a password.
  498.  
  499.   o   Added commands to add a new security profile
  500.      Added the Command Session 'profile add' and PBBS 'profile add'
  501.      commands. These allow the sysop (locally or remotely) to add a new
  502.      security profile to the 'security' file, without having to manually
  503.      edit the 'security' file.
  504.      This can only be used from the Command Session, or if an individual
  505.      with SYSOP permissions logged in, authenticated with a password.
  506.  
  507.   o   Added a ax25 loopback device
  508.      To use this device, do an 'attach axloop' command. Set any needed
  509.      parameters on the newly created 'axlp' interface, and it's ready to
  510.      use.
  511.  
  512.   o   Added a dumb node-like application
  513.      For those wanting a front-end that looks like a normal Netrom node
  514.      (that is, non-verbose, with only a few commands), you can now
  515.      define a 'node call' and connects to that call will go to this new
  516.      node application. The commands within the node are self-
  517.      explanatory, and the 'help' and '?' commands list them.
  518.      The current internal node commands are:
  519.  
  520.   o  ?
  521.      Give short list of all commands
  522.  
  523.   o  Bye
  524.      Bye (ie. disconnect)
  525.  
  526.   o  Connect pt cl
  527.      AX.25 connection, if permitted on port 'pt' to call 'cl'
  528.  
  529.   o  CONFerence #
  530.      Conference bridge entry (optional initial channel number #)
  531.  
  532.   o  Help [subj]
  533.      Help - get help on a subject
  534.  
  535.   o  Info
  536.      Information on this system
  537.  
  538.   o  Jheard
  539.      Just heard, on all ports
  540.  
  541.   o  Jheard port
  542.      Just heard on 'port'
  543.  
  544.   o  Nodes
  545.      List all netrom known nodes
  546.  
  547.   o  NRoutes
  548.      List all netrom neighbor routes
  549.  
  550.   o  Pbbs
  551.      Connect to the corresponding PBBS
  552.  
  553.   o  POrts
  554.      Give a list of the ports of the system
  555.  
  556.   o  Talk
  557.      Chat with operator (if system is attended)
  558.  
  559.   o  Telnet host
  560.      Telnet to 'host' (if permitted)
  561.  
  562.   o  Quit
  563.      Quit, same as 'bye' (ie. disconnect)
  564.  
  565.   o  Users
  566.      Shows current mailbox users
  567.  
  568.      The node's 'PBBS' command will do a 'C xxxx' to the 'node bbscall'
  569.      callsign, if it is defined. If the 'node bbsinterface' is also
  570.      defined, then it will do a 'C ifc xxxx' connection. This allows you
  571.      to divert the node's PBBS command to another PBBS. If the 'node
  572.      bbscall' is not set, a 'PBBS' command will do a 'telnet localhost'
  573.      to the TNOS PBBS. Only real difference is that login/password
  574.      prompting occurs.
  575.      To avoid the login prompting, do an 'attach axloop', set the
  576.      interface parameters appropriately, and define the 'node bbscall'
  577.      to be the call of the PBBS, and the 'node bbsinterface' to be
  578.      'axlp'.
  579.      The 'INFO' command simply displays the 'NODEInfo' file, and the
  580.      'HELP' command uses the 'NODEHelp' file.
  581.      While it may appear to be different than the PBBS, internally the
  582.      NODE is using the PBBS routines to do almost all of its work.
  583.  
  584.   o   Added the Command Session 'node' command and its subcommands
  585.      This command is used to alter the settings/characteristics of the
  586.      NODE application. The various subcommands are:
  587.  
  588.   o  node alias
  589.      Sets the alias assigned to the node. If this is set, then this
  590.      callsign will ALSO route to the node application. This is an
  591.      optional subcommand, if the 'node call' command is used. Either
  592.      'node call' or the 'node alias' must be defined to route users to
  593.      the NODE application.
  594.  
  595.   o  node banner
  596.      Sets an optional banner string to be displayed on initial connect.
  597.      While some will want a completely silent node, others will prefer
  598.      at least SOME output, so that the user knows he got there fine. If
  599.      this command is NOT defined, then no output will be given on
  600.      connection.
  601.  
  602.   o  node bbscall
  603.  
  604.   o  node bbsinterface
  605.      The 'node bbscall' and 'node bbsinterface' commands affect the
  606.      action taken with the NODE's 'PBBS' command is given. If neither of
  607.      these commands are given, then the TNOS PBBS will be connected to.
  608.      The method used to connect to the TNOS PBBS depends on whether or
  609.      not the ax25 loopback interface 'axlp' is attached. If the 'axlp'
  610.      interface is found, then it is used, and the connect is ax25, as if
  611.      the user had entered a 'C axlp mycall' command. If the 'axlp'
  612.      interface is not found, then a 'telnet' is used, as if the user had
  613.      entered a 'telnet localhost' command.
  614.      If the 'node bbscall' is defined (but the 'node bbsinterface' is
  615.      NOT defined, then the PBBS named in this command is connected to
  616.      via netrom, as if the user had entered a 'C call' command.  The
  617.      named PBBS must be accessable via netrom.
  618.      If the 'node bbscall' and the 'node bbsinterface' are both defined,
  619.      then the named PBBS will be connected to on the named interface, as
  620.      if the user had entered a 'C ifc call' command.
  621.  
  622.   o  node call
  623.      Sets the callsign assigned to the node. If this is set, then this
  624.      callsign will route to the node application. This is an optional
  625.      subcommand, if the 'node alias' is defined. Either 'node call' or
  626.      the 'node alias' must be defined to route users to the NODE
  627.      application.
  628.  
  629.   o  node gatewayexit
  630.      This command, if set, will make the NODE application automatically
  631.      disconnect all users after they return from a gateway command
  632.      (Connect, Telner, or Pbbs). If this command is NOT set, they will
  633.      return back to the NODE application.
  634.  
  635.   o  node netrom2node
  636.      This boolean command can be used to intercept the Netrom callsign,
  637.      and instead divert it to the NODE application.
  638.  
  639.   o  node nralias2node
  640.      This boolean command can be used to intercept the Netrom alias
  641.      callsign, and instead divert it to the NODE application.
  642.  
  643.   o  node showid
  644.      This can be used to view the ID string that the NODE currently is
  645.      using. The ID string varies depending on the values of the 'node
  646.      alias' and 'node call' commands. If both are defined, the string is
  647.      'node:call}'.  If neither command are defined, the string is
  648.      'NODE}'. If only one of the commands are defined, then the string
  649.      is 'callsign}'.
  650.   o   Added a PBBS 'tnode' command to directly enter the NODE
  651.      application
  652.  
  653.   o   All the above included in 2.30b1
  654.  
  655.   o   Added 'start/stop fbbtelnet' commands for incoming FBB telnets
  656.      While outgoing FBB telnets have already been hacked to work (FBB
  657.      improperly uses <CR><LF> instead of just <CR>), incoming did not
  658.      work. Now you can (if needed) 'start fbbtelnet' and a listener
  659.      process will be waiting for FBB incoming connections on port 2323.
  660.      The remote FBB will need to be configured to connect to that port
  661.      number.
  662.      If you wish to change the port number being listened to, you can,
  663.      in the same way as with the telnet server.
  664.      The ONLY difference with fbbtelnet from telnet is that the end-of-
  665.      line sequence is made into <CR><LF> for fbbtelnet.
  666.  
  667.   o   Changed the 'profile newprofile' commands to 'profile add'
  668.      The older name was only around for beta 1 of this release.
  669.  
  670.   o   Added a 'profile usermodifyable' command
  671.      This allows the sysop to choose whether or not the end users (non-
  672.      sysop users) are allowed to change their own passwords. The default
  673.      is disabled.
  674.  
  675.   o   Added a 'profile fileext' command
  676.      Since several TNOS users (including the author) use several
  677.      different security files (included by the top level 'security'
  678.      file) and would not want the 'security' file itself being altered,
  679.      this command allows you to have, for example, a 'security.users'
  680.      (or 'security.usr' for DOS) file, and place users who can alter
  681.      their passwords in this file.
  682.      If this command is not defined, then no extension is used, and the
  683.      'security' file itself is used for the 'profile add', and 'profile
  684.      passwd' Command Session commands (and the 'newprofile', and
  685.      'passwd' PBBS commands).
  686.  
  687.   o   Added commands to change a security profile
  688.      Added the Command Session 'profile change' and PBBS 'profile
  689.      change' commands. These allow the sysop (locally or remotely) to
  690.      change an existing security profile in the 'security' file, without
  691.      having to manually edit the 'security' file.
  692.      This can only be used from the Command Session, or if an individual
  693.      with SYSOP permissions logged in, authenticated with a password.
  694.  
  695.   o   Added commands to list a security profile
  696.      Added the Command Session 'profile list' and PBBS 'profile list'
  697.      commands. These allow the sysop (locally or remotely) to list an
  698.      existing security profile from the 'security' file, without having
  699.      to manually edit the 'security' file.
  700.      This can only be used from the Command Session, or if an individual
  701.      with SYSOP permissions logged in, authenticated with a password.
  702.  
  703.   o   Added commands to delete a security profile
  704.      Added the Command Session 'profile delete' and PBBS 'profile
  705.      delete' commands. These allow the sysop (locally or remotely) to
  706.      delete an existing security profile from the 'security' file,
  707.      without having to manually edit the 'security' file.
  708.      This can only be used from the Command Session, or if an individual
  709.      with SYSOP permissions logged in, authenticated with a password.
  710.  
  711.   o   Added uuencode capability to the PBBS 'upload' command
  712.      As a complimentary operation to the 'DU' (download and uuencode)
  713.      command, there is now a 'UU' (upload and uudecode) command. The
  714.      file is saved in the filename specified in the command line (that
  715.      is, the filename in the 'begin' line of the uuencoded file is
  716.      ignored). Any data before the 'begin' line or after the 'end' line
  717.      will be ignored.
  718.      If the 'security createsecure' command is 'off', then the file mode
  719.      listed in the 'begin' line will be preserved as-is. If the
  720.      'security createsecure' command is on, then the file mode listed in
  721.      the 'begin' line will be masked against the value of the 'security
  722.      createperms' command, and only permissions allowed in the 'security
  723.      createperms' command will be preserved.
  724.  
  725.   o   Added protection against SIGSEGV around free() calls (Unix
  726.      version)
  727.      When a gremlin in TNOS modifies another processes memory, usually a
  728.      memory pointer gets corrupted. When the pointer attempts to free
  729.      the memory it held, it usually results in a crash, with a SIGSEGV.
  730.      While there is no way to determine what that pointer used to be and
  731.      free the proper memory segment, we can prevent the attempt to free
  732.      the memory from crashing the TNOS application.
  733.      The number of times that a free resulted in a SIGSEGV (that
  734.      recovery was possible) is now found in the 'kstat' command's
  735.      output.
  736.  
  737.   o   MAJOR internal overhaul of the Converse Server code
  738.      While nothing is visible externally, the code for this server was
  739.      looked at under a microscope and all potential problems related to
  740.      possible buffer overflows (due to remote sites running broken
  741.      servers, sending erroneous data) have been eliminated. Though hard
  742.      to immediately prove, the author believes that TNOS stabiltiy will
  743.      improve even more due to this.  Many occasional periods of
  744.      instabilty are coincidentally linked to times when experimental
  745.      converse servers are causing havok on the non-TNOS converse
  746.      servers, too.
  747.  
  748.   o   Added a Command Session 'shutdown' command
  749.      This is a convenience command, which provides an easy way to notify
  750.      all users of a shutdown. The syntax is one of:
  751.  
  752.              shutdown <delayinseconds> "message"
  753.              shutdown now "message"
  754.  
  755.   The "message" string must be surrounded by quotes or braces, as the
  756.   string must be seen by TNOS as a single argument. The first parameter
  757.   can either be the string 'now' (which is treated the same as with a
  758.   delay value of '0'), or it can be a delay value (in seconds). If the
  759.   delay value is non-zero, then a message will be sent to all users
  760.   immediately, telling them of how many seconds till the shutdown, then
  761.   the function will delay that many seconds.
  762.   After the delay time (if any) a message will be sent to all users,
  763.   telling them of the shutdown. Then a final five second delay will be
  764.   done, to allow all output to have time to flush. After this, TNOS will
  765.   exit.
  766.  
  767.   o   Added timer statistics to the output of the 'timers' command
  768.  
  769.   o   All the above included in 2.30b2
  770.  
  771.   o   Added a 'ip routesame' command
  772.      This command controls whether or not an IP packet is allowed to be
  773.      routed back out the same interface it was received on. The default
  774.      for this command is 'off'. Normally, enabling this will leave the
  775.      system open to being an unwilling participant in eternal routing
  776.      loops, if a remote system is mis-configured. If you know you have a
  777.      need for this, enable it. Otherwise the default of 'off' is
  778.      probably safe.
  779.  
  780.   o   Added a 'crashprotect' Command Session command
  781.      This functionality is disabled in production releases of TNOS, as
  782.      it should be used only for diagnostic purposes.
  783.      TNOS inherited its code base (once upon a time) from JNOS. While
  784.      JNOS (and even TNOS, prior to the port to DJGPP) *seems* relatively
  785.      stable, this is mostly due to MSDOS allowing writes to random
  786.      memory. There have been (literally) nearly 1000 hours of cleanup
  787.      and debugging by the author to clean up the code base, and make
  788.      TNOS rock-solid stable. While for most users this is a reality, for
  789.      some it is not. Some components of TNOS (with certain conditions)
  790.      can get confused and write to memory owned by other TNOS internal
  791.      processes. The offending process usually does NOT have a problem,
  792.      but causes one for the process that now has corrupted memory. The
  793.      victim process usually crashes TNOS.
  794.      Once again, most users do not see this. The author does, and that
  795.      is mainly because the ko4ks.ampr.org site runs nearly all of the
  796.      functionality of TNOS, so that it is thoroughly tested. This makes
  797.      it hard, though, to trace down exactly which application(s) are
  798.      causing the problem.
  799.      The 'crashprotect' command (which defaults to off) allows the SYSOP
  800.      to disable the protections added in TNOS 2.30 to prevent crashes
  801.      when one process corrupts another processes memory. Some SYSOPS
  802.      would rather have the system recycle rather than possibly have some
  803.      component in the system unstable.  Others would rather have the
  804.      individual process or corrupted timer ignored and have the system
  805.      do its best to continue. This command allows both.
  806.      The 'crashprotect' command affects whether or not the SIGSEGV
  807.      protection (on UNIX only), the corrupted process table protection,
  808.      and the corrupted timer table protection are to be used. If the
  809.      'crashprotect' is 'off', then any of these events will cause an
  810.      immediate, orderly exit. Those wishing to debug these exists will
  811.      need to place a breakpoint at either the function named
  812.      'crash_it_already', which is only included as a place for easily
  813.      catching this shutdown in a debugger, or at the function named
  814.      'shall_we_crash', which is called earlier, at the point where the
  815.      'crashprotect' setting is being looked at to determine whether to
  816.      protect or crash.
  817.      If the 'crashprotect' is turned 'on', then these events will be
  818.      protected, and individual processes encountering the errors will do
  819.      their best with the situation.
  820.  
  821.   o   Some NNTP enhancements/fixes from Gareth
  822.      The first one makes the 'nntp ihave' work as it was intended.
  823.      Setting the 'nntp ihave' to 0 will now reject any incoming news
  824.      articles attempted to be forwarded by another host using 'ihave'. A
  825.      value of 1 for 'nntp ihave' permits inbound news from a server
  826.      using 'ihave', while setting 'nntp ihave' to 2 engages the 'ihave'
  827.      pusher to send news from the local TNOS.
  828.      The rest are the addition of the LISTGROUP command from Stan
  829.      Barber's draft nntp extensions, together with the LIST EXTENSIONS
  830.      and MODE READER commands.  This makes it possible to use (at least)
  831.      the 'pine' mail and news reader with the TNOS NNTP server.
  832.      Also from Gareth are these notes on pine and TNOS nntp, as a
  833.      Getting started with pine and nntp
  834.  
  835.      1. Choose SETUP from the main menu
  836.  
  837.      2. Select 'C' for config
  838.  
  839.      3. Set 'smtp server' and 'nntp server' to your TNOS's hostname
  840.  
  841.      4. Optionally you can set the 'inbox-path' to the path of your own
  842.         TNOS mail file (e.g. /nos/spool/mail/g4hip.txt)
  843.  
  844.      5. Set the 'news-collections' entry to point to your TNOS site,
  845.         *{your.tnos.hostname/nntp}[] (e.g.
  846.         *{pellaz.g4hip.ampr.org/nntp}[])
  847.  
  848.      6. Then 'E'xit config, and confirm the changes then Quit from the
  849.         main menu and restart pine.
  850.  
  851.      7. After restart, head for 'folder collection' menu item on the
  852.         main Pine screen and move the bright-up bar to the newsy bit at
  853.         the bottom.  Type: A   then wait for an invitation to list a
  854.         group.
  855.         Type something you expect to see in the newsgroup name you want
  856.         to subscribe to, (e.g. ampr) as there doesn't seem to be a way
  857.         of getting a list of everything.  Then use ^X to bring up a list
  858.         of matching newsgroups. Select from the list a newsgroup or two
  859.         to subscribe to, and take things from there.
  860.  
  861.      Note: If you use Pine to DIRECTLY alter your TNOS mail file, the
  862.      TNOS index file is NOT updated, so you will either need to do a
  863.      'buildctl xxxx' (where 'xxxx' is your mail area name) or only
  864.      access your TNOS mail area from Pine and NOT from within TNOS.
  865.  
  866.   o   Added an 'ax25 counters' command
  867.      Several counters have been added to support this command, to allow
  868.      the sysop to get a better understanding of the performance of his
  869.      ax25 connectivity. Counters were added for each ax25 interface for
  870.      the following:
  871.  
  872.   o  Total Frames - in and out
  873.  
  874.   o  Data Frames - in and out
  875.  
  876.   o  Frame Segments - in, out and errors
  877.  
  878.   o  RNR Frames - in and out
  879.  
  880.   o  REJ Frames - in and out
  881.  
  882.   o  Retries sent
  883.  
  884.   o  FRMR Frames received
  885.  
  886.      The 'ax25 counters' command can give these counters for all
  887.      interfaces (if no other parameters are given), for a single
  888.      interface (if only one parameter is given) or for multiple
  889.      interfaces (if multiple parameters are given).
  890.  
  891.   o   Added a PBBS 'counters' command
  892.      This gives the same display and takes the same parameters as the
  893.      'ax25 counters' command described in the last item.
  894.  
  895.   o   Added ability for TNOS to assist in part-time gateway routing
  896.      Inspired by mfnos, the 'remote' command has been enhanced to allow
  897.      trusted remote sysops to add gateway encap routes to their site
  898.      which run with non-static IP addresses. After completing the TNOS
  899.      implementation of this feature, the author shared the code with the
  900.      author of MFNOS, who seems to have chosen to add the password
  901.      protection that the TNOS implementation required.
  902.      As with one of the long-standing design rules of TNOS, commands
  903.      will not be added which either jepardize the security of the site,
  904.      or prevent the sysop from being in complete control. This command
  905.      is no different.
  906.      The complete revised list of uses of the 'remote' command are:
  907.  
  908.      1. remote [-p <port#>] [-a <kickaddress>] <hostname> kickme
  909.  
  910.      2. remote [-p <port#>] -k <key> <hostname> reset|exit
  911.  
  912.      3. remote -s <password>
  913.  
  914.      4. remote [-p <port#>] -k <key> -r <destIPaddr>[/<bits>] <hostname>
  915.         add|drop
  916.  
  917.      5. remote -g <gatewaypassword>
  918.  
  919.      The new additions are the last two entries. The last line adds a
  920.      gateway password used only by entry number 4. The '-s' password is
  921.      only used for the 'exit' and 'reset' commands. The '-g' password is
  922.      only used for the 'add' and 'drop' commands from entry number 5.
  923.      For a remote system to add a route to your TNOS:
  924.  
  925.      1. You MUST have a TNOS compiled with the ENCAP flag enabled.
  926.  
  927.      2. You MUST enable a gateway password with the '-g' sub-command.
  928.  
  929.      3. The remote site must also be running TNOS (version 2.30 or
  930.         later).
  931.  
  932.      4. The remote site MUST have a TNOS compiled with the ENCAP flag
  933.         enabled.
  934.  
  935.      5. The remote must issue an 'add' command, probably in their
  936.         'autoexec.nos' file, using the proper gateway password.
  937.  
  938.      The restriction of number 3 may be unnecessary if other xNOSs
  939.      implement this functionality and do so in the same manner. I am
  940.      told that the next version MFNOS should be compatible.
  941.      Remote systems using this functionality should have a 'drop' com-
  942.      mand in their 'onexit.nos' file.
  943.      The easy way to see if you have a TNOS with the ENCAP flag enabled
  944.      is to do a 'ifconfig' command, and see if you have an 'encap'
  945.      interface.
  946.      When a proper 'add' command is received (with a proper password), a
  947.      private route is added to your routing table for the 'destIPaddr'
  948.      the remote specified, added to the routing for the encap interface.
  949.      The address that the remote command came from is the address that
  950.      the routing for the encap interface will use. For example, if a
  951.      remote system with a non-static ip address of '4.5.6.7' sent a
  952.      'remote -k xxx -r 44.2.3.0/24 ko4ks add' command and 'xxx' was the
  953.      gateway password at ko4ks, then this is the same as if the follow-
  954.      ing command were entered at the ko4ks Command Session prompt:
  955.  
  956.              route addprivate 44.2.3.0/24 encap 4.5.6.7
  957.  
  958.   Note, that the route string specified by the '-r' parameter MUST be a
  959.   '44.x.x.x' address, and the address that the packet is received from
  960.   must NOT be a '44.x.x.x' address, but must be the non-ampr, static IP
  961.   address. Also, an attempt to use a route string of '0.0.0.0' (to re-
  962.   define the default route) is ignored.
  963.  
  964.   o   Added 'stats http' commands
  965.      Like the other 'stats' subsystems, the HTTP stats subcommand keep
  966.      track of hourly, daily, monthly, yearly, and general information,
  967.      which for the HTTP server is the number of total requests and the
  968.      number of those requests that were directed to the PBBS (if the
  969.      HTTPPBBS compile flag is enabled).
  970.      Note that the TNOS browser does a 'look-ahead' for each URL it
  971.      fetches, by doing a 'HEAD' command, looking at the headers, and
  972.      determining whether or not it can render the data of the URL or if
  973.      it is only available to be downloaded. So, when you 'hit' a TNOS
  974.      server from a TNOS browser, the actual requests are TWO.
  975.  
  976.   o   Added a built-in HTTP status page to the HTTP server
  977.      The predefined URL of '/status' (or '/status/') will render an HTML
  978.      page dynamically that gives details on the HTTP server and its
  979.      status. This is not configuratable in its output. You CAN disable
  980.      this special built-in URL, using the new 'http statusurl' command.
  981.      The 'http statusurl' command is enabled by default.
  982.      The statistics from the 'stats http' subcommands are included in
  983.      this dynamically rendered URL, if the STATS_HTTP compile flag is
  984.      enabled.
  985.  
  986.   o  Enhanced (some would say fixed) the 'ip access' usage
  987.      The previous releases of TNOS (and JNOS, etc) treat the 'ip access'
  988.      command in a way that is not entirely intuitive. If no entries for
  989.      an interface exist, then the interface is assumed to be open, which
  990.      is fine.  And if an interface has any entries, then there must be a
  991.      rule permitting the access, which again is fine.
  992.      The problem is, that it is not exactly intuitive. If you wish to
  993.      deny certain UDP ports, then you add an 'ip access deny udp ....'
  994.      command, right? Well, without ALSO having a line permitting all
  995.      other ports, you basically deny all ports by virtue of having now
  996.      defined access permissions without a default rule.
  997.      So now, when an 'ip access' command adds either a deny or permit
  998.      permission for a UDP or TCP port, a check is made to see if this
  999.      port is already covered by an entry. If it is not, then a default
  1000.      inverse set of permissions is defined for that protocol.
  1001.      A by-product of the old treatment of 'ip access' was that if, for
  1002.      example, the TCP port 3600 was denied to anyone, then unless
  1003.      otherwise stated, then all UDP ports (and all other protocols) were
  1004.      ALSO denied. Really kinda hard to see how it all worked, huh! ;-)
  1005.      Even more problems found and fixed, in that the ORDER of the
  1006.      entries made a difference, and while you may THINK that you had a
  1007.      'deny' entry in there, it might have been overridden by a global
  1008.      'permit' of all other ports!
  1009.      ALSO a note: Many misunderstand the purpose/scope of the 'ip
  1010.      access' command. This command ONLY only deals with IP frames being
  1011.      routed THROUGH your site. It does NOT affect frames coming
  1012.      addressed TO your site! You use the 'tcp access' command for
  1013.      restricting your own TCP ports. There is NO equivalent 'udp access'
  1014.      command, though, for blocking UDP packets addressed to your site.
  1015.  
  1016.   o  Enhanced (some would say fixed) the 'tcp access' usage
  1017.      Yep, you guessed it! The 'tcp access' was equally counter-
  1018.      intuitive!  So now, when an 'tcp access' command adds either a deny
  1019.      or permit permission for a TCP port, a check is made to see if this
  1020.      port is already covered by an entry. If it is not, then a default
  1021.      inverse set of permissions is defined.
  1022.      A by-product of the old treatment of 'tcp access' was that if, for
  1023.      example, the TCP port 3600 was denied to anyone, then unless
  1024.      otherwise stated, then all TCP ports were denied to EVERYONE.
  1025.      Really kinda hard to see how this worked, too! ;-) Even more
  1026.      problems found and fixed, in that the ORDER of the entries made a
  1027.      difference, and while you may THINK that you had a 'deny' entry in
  1028.      there, it might have been overridden by a global 'permit' of all
  1029.      other ports!
  1030.  
  1031.   o   Added a 'udp access' command
  1032.      Works the same as the 'tcp access' command, with the changes
  1033.      mentioned in the previous entry.
  1034.  
  1035.   o   All the above included in 2.30b3
  1036.  
  1037.   o   Added an optional 'unbuffered' parameter to the trace command for
  1038.      files
  1039.      If you are tracing to a file and wish to 'tail -f' it to also see
  1040.      the data in real-time, or if you wish to trace to a TTY (console or
  1041.      serial port) and wish the data to be unbuffered, then just add
  1042.      'unbuffered' (or actually only the 'u' is needed) to the trace
  1043.      command, after the filename.  This is not suggested for simply
  1044.      logging the information, only if you also need to see it without
  1045.      buffering. Unbuffered file I/O uses an order of magnitude more CPU
  1046.      to do the same work.
  1047.  
  1048.   o   The 'crashprotect' command ONLY enabled for alpha code
  1049.      As this is for diagnostic purposes only, the command is disabled
  1050.      for production releases. It's use by anyone else but the author is
  1051.      discouraged!
  1052.  
  1053.   o   All the above included in 2.30b4
  1054.  
  1055.   o   Added a new client/server protocol for adding dynamic gateways
  1056.      Like the extensions to the 'remote' command, this new protocol can
  1057.      allow a remote TNOS server to make available ENCAP routing for a
  1058.      client that has a dynamic IP address. The server for this protocol
  1059.      is activated with a 'start router' command. The client is activated
  1060.      with a 'start dynamic' command.
  1061.      Both the client and server use a configuration file, that (while
  1062.      different in usage) is identical in file format. The server's file
  1063.      is located at 'etc/routesvr.dat' and the client's file is at
  1064.      'etc/encap-rt.dat'.  Each of these files can have blank lines or
  1065.      lines beginning with a '#', which are treated as comments. All
  1066.      other lines have two fields, surrounded by any amount of white
  1067.      space. The first field is a route string, and can be any route
  1068.      address (with optional '/bits') that is valid for the third
  1069.      parameter of a 'route add' command. The second field is an
  1070.      authentication string, used for security.
  1071.      For the server, this file contains all of the dynamic routes that
  1072.      will be allowed to be added by remote sites. Each route must be
  1073.      authenticated with the authentication string by the client
  1074.      application to be added.  This one file contains all possible
  1075.      routes that can be added by all possible clients.
  1076.      For the client, this file contains all of the routes that are
  1077.      desired to be added to the server's routing table. The
  1078.      authentication strings in the client's 'etc/encap-rt.dat' file must
  1079.      match the corresponding authentication string in the server's
  1080.      'etc/routesvr.dat' file for the route string specified.
  1081.      When the client/server connection is broken (due to either side
  1082.      going away), the client's routing is removed from the server
  1083.      machine.
  1084.      A Unix stand-alone version of both the client and the server will
  1085.      also be made available, for compatibility.
  1086.  
  1087.   o   Removed the experimental AX.25 Negotiation extensions code
  1088.      The compile flag 'AXNEGOTIATION' is removed, along with it's code,
  1089.      which includes the 'ax25 negotiate' command.
  1090.  
  1091.   4.  Minor Changes
  1092.  
  1093.   The following minor changes have occurred.
  1094.  
  1095.   o   Removed some unused code in unixasy.[ch]
  1096.  
  1097.   o   Cleaned up some potential memory overruns in xfwd.c
  1098.  
  1099.   o   Added a 'DUMBPMS' attribute to the forward.bbs syntax
  1100.  
  1101.   o   The above included in 2.22pl2
  1102.  
  1103.   o   Added hold count to the summary line for 'AN' and 'AS' commands
  1104.  
  1105.   o   Added code to Unix version to decompress man files (if needed)
  1106.  
  1107.   o   Cleaned up output of 'ps' command
  1108.      This actually involved making many changes to the various servers
  1109.      in TNOS to have them release the unused copies that they kept of
  1110.      the Command Session's sockets. Now the unused in/out sockets are
  1111.      not displayed.
  1112.      Also modified many servers to have them reflect the user/site
  1113.      connected as part of the process's name (where applicable).
  1114.  
  1115.   o   Changed output of 'smtp rewritetrace' - first pass is now 1, not 0
  1116.  
  1117.   o   Added more trace information for forwarding using MBL/RLI method
  1118.  
  1119.   o   Changes to build-make.inc/makefile.unx to better setup environment
  1120.  
  1121.   o   Changes to build-make.inc/makefile.unx for CURSES
  1122.      Now, while older ncurses releases are still looked for, the default
  1123.      is to include curses.h, if no ncurses.h is found. For sites with
  1124.      newer ncurses releases, it defaults to what's needed, without
  1125.      needing to add a symlink of ncurses.h.
  1126.      If a regular CURSES library is used, all that needs to be manually
  1127.      changed is the 'LCURSES' from '-lncurses' to '-lcurses'.
  1128.  
  1129.   o   Cleaned up premake and build-make.inc for /bin/sh
  1130.      There were some bash-specific items in there, which will now
  1131.      execute properly under vanilla-'sh'.
  1132.  
  1133.   o   Unix 'make dep' no longer discards error messages
  1134.  
  1135.   o   Added support for multiple-job compiles under Unix
  1136.      Uses GNU Make's ability to compile multiple components at once. The
  1137.      default is the same as before (i.e., compiles one file at a time).
  1138.      Unless you have sufficient memory (and ideally a SMP system) this
  1139.      is what you want.
  1140.      But, if you wish to parallelize your compiles, add a line in your
  1141.      make.inc file, of 'JOBS = x', where 'x' is the number of processes
  1142.      to allow concurently.
  1143.      Multiple concurent compilation is only active while the TNOS
  1144.      libraries are compiling, as most of the other few files MUST be
  1145.      processed before the libraries are started.
  1146.  
  1147.   o   For consistency, changed 'pbbs mailfor timer' command
  1148.      All other timer commands set the timer, but do NOT kick it when it
  1149.      is being set. The 'pbbs mailfor' timer WAS kicking when being set.
  1150.      This has now been changed for consistency with the other timer-set
  1151.      routines.
  1152.      The only real impact is if you wish to beacon out the mailfor info
  1153.      on startup, you must now add a 'pbbs mailfor now' command to your
  1154.      autoexec.nos file.
  1155.  
  1156.   o   Removed MAKEELF makefile variable (UNIX version)
  1157.  
  1158.   o   Removed the 'stack' column from 'ps' display on all platforms
  1159.      As some platforms (not using SETSTACK) did NOT display the stack
  1160.      pointer and others did, there was an unneeded inconsistency. Since
  1161.      even the author wasn't using the stack pointer information, this
  1162.      will not be an impact on anyone.
  1163.  
  1164.   o   Added number of lost signals to the 'kstat' command output
  1165.  
  1166.   o   Increased number of signals that can be queued to 300
  1167.  
  1168.   o   Added visual indication to the status line to indicate flow mode
  1169.      on/off
  1170.      The first line will have the number of sessions surrounded in
  1171.      square brackets if flow mode is off for the current session, and
  1172.      surrounded in '><' if flow mode is on for the current session.
  1173.  
  1174.   o   Added features map string to version info display
  1175.      This is the display produced by the Command Session 'version'
  1176.      command, the PBBS 'version' command and the finger of the pseudo-
  1177.      user, 'info'.
  1178.  
  1179.   o   Alphabetized the devices in the 'attach' list ;-)
  1180.  
  1181.   o   Added a logfile entry with the 'uptime' to shutdown messages
  1182.  
  1183.   o   Added some missing trace lines to XFWD code
  1184.  
  1185.   o   All the above included in 2.30b1
  1186.  
  1187.   o   Removed portion of code forcing Command Session into flow mode
  1188.      When coming BACK to Command Session from any other session, TNOS
  1189.      used to always force the Command Session's flow mode on. This no
  1190.      longer occurs.
  1191.  
  1192.   o   Added to the Command Session's 'sendmail' command an implied smtp
  1193.      kick
  1194.  
  1195.   o   Made all file buffers use TNOS mallocw routine
  1196.      Since TNOS already intercepts the fopen() and tmpfile() calls, code
  1197.      has been added to allocate our own buffers, but using TNOS's
  1198.      mallocw(), instead of allowing the C library to do its own
  1199.      allocation using the normal malloc() function.
  1200.      The difference is that the mallocw() function is a waiting (hence
  1201.      the 'w') function that will try repeatedly up to 150 seconds (in
  1202.      one second delays) if memory allocation fails. While under plain
  1203.      MSDOS, memory is either there or it is not, under UNIX (or MSDOS
  1204.      using a virtual memory DPMI manager), memory may NOT be available
  1205.      at the moment, but could be as soon as some cleanup occurs.
  1206.      This will complete the usage within TNOS of mallocw() and
  1207.      callocw(), to prevent any possible false memory failures.
  1208.  
  1209.   o   Added a 'pbbs logintimer' command
  1210.      This command sets the amount of time (in seconds) that someone can
  1211.      remain inactive at a 'username' or 'password' prompt, before the
  1212.      login is timed out. By default, this is set to 180 seconds (3
  1213.      minutes). Setting this command to '0' disables the login timeout.
  1214.  
  1215.   o   Added ability to call 'exit' Command Session command in crontabs
  1216.  
  1217.   o   Minor change in the handling of crontab
  1218.      This only affects the parsing of a crontab at startup. Previously,
  1219.      the crontab was parsed on startup, then it would sleep for 60
  1220.      seconds. This meant that if, for example, you had an entry to
  1221.      'exit' at a certain time, once TNOS would restart it would hit that
  1222.      same rule again, and restart immediately. It would continue to do
  1223.      this, until the next minute came.
  1224.      Now the crontab handler first sleeps 60 seconds, and then processes
  1225.      the crontab. This will prevent the spuratic restarts mentioned
  1226.      above.
  1227.      The only impact is that TNOS will delay 1 minute before making it's
  1228.      first crontab check on startup, which should have no adverse
  1229.      reaction to anyone's setup.
  1230.  
  1231.   o   Added a way to disable netrom on an interface
  1232.      On analysis, it seems that there was previously no way to disable
  1233.      netrom from an interface, once the 'netrom interface' command was
  1234.      run for an interface. Now, a 'netrom interface <ifc> off' will
  1235.      disable netrom from any interface.
  1236.  
  1237.   o   Added a Command Session console message when 'Exiting TNOS'
  1238.  
  1239.   o   Changed internal tick interval from 55 ms per tick to 20 ms per
  1240.      tick
  1241.      Not a big change, except that any timer will only be as much as 20
  1242.      ms longer than desired, versus the current state, where a timer
  1243.      could be 55 ms longer than needed. This may get changed to an even
  1244.      smaller value later. It really doesn't make any significant change,
  1245.      since the timer process is running (at the present time) several
  1246.      times for each 'tick'.
  1247.      While mainly a cosmetic issue, 55 ms per tick comes out to 18.181
  1248.      ticks per second, and 50 ticks per second is more understandable.
  1249.  
  1250.   o   Added ms to the expiration times in the 'timers' command
  1251.  
  1252.   o   Combined router_queue() and queuejob() into one routine
  1253.  
  1254.   o   All the above included in 2.30b2
  1255.  
  1256.   o   Added interpretation of special characters within browser tables
  1257.  
  1258.   o   Found way to portably silence last two MSDOS compiler warnings
  1259.  
  1260.   o   All the above included in 2.30b3
  1261.  
  1262.   o   Remove unneeded code in POP client
  1263.  
  1264.   o   All the above included in 2.30b4
  1265.  
  1266.   5.  Remaining Known Bugs
  1267.  
  1268.   The following are known bugs that will be addressed in the near
  1269.   future.  These may or may not be fixed before the next release is made
  1270.   available.
  1271.  
  1272.   1.  The proxy server scripts do not seem to work properly
  1273.      There is a problem, that is being looked into, which seems to be
  1274.      related to calling scripts from within scripts (which proxy.scr
  1275.      DOES).
  1276.  
  1277.   2.  None other at this time.... ;-)
  1278.  
  1279.   6.  To-Do List
  1280.  
  1281.   The following are things on the author's 'to-do' list that are being
  1282.   considered for this or a future release of TNOS. These may eventually
  1283.   be done, but not necessarily by the next release.
  1284.  
  1285.   1.  Complete the spec and coding of the non-IP HTTP PBBS interface
  1286.  
  1287.   2.  Consider adding to the browser support for the 'select' and
  1288.      'textarea' tags
  1289.  
  1290.   3.  Consider adding to the browser better rendering of tables within
  1291.      tables
  1292.  
  1293.   4.  Export a complete set of CGI environment variables when 'exec cmd'
  1294.      used
  1295.  
  1296.      Currently you can execute a program and pass in explicit parameters
  1297.      (which CAN be dynamically assigned using server-side includes), but
  1298.      it is NOT a CGI-compatible interface. I will consider adding this
  1299.      at a later time.
  1300.  
  1301.   5.  Add capability to allow use of OS commands
  1302.      This includes finishing the incomplete 'pipe' command in the Unix
  1303.      release.  Due to the obvious restrictions of MS-DOS (memory, etc.),
  1304.      this WILL be considered for Unix version only.
  1305.  
  1306.   6.  Consider adding better support for PBBS<->Internet mail address
  1307.      translation
  1308.  
  1309.      The 'translate' file and improved handling of aliases is a START,
  1310.      but more work needs to be done here. Maybe a 'translate.out'
  1311.      file...
  1312.  
  1313.   7.  Consider adding code to allow a TIP socket type, for use with LL
  1314.      Modems
  1315.  
  1316.   8.  Tweek the WPages code a bit
  1317.      Need to improve the code that insures that the wpagebbs entries are
  1318.      correct, of the proper length, and actually look like hier
  1319.      addresses. Also, make the expiring of WPages files less fragile if
  1320.      the file has become corrupted.
  1321.  
  1322.   9.  Check into duplicate entries in the WP files
  1323.      While not harmful, the WPages routines SHOULD be overwriting
  1324.      existing entries, NOT creating new ones.
  1325.  
  1326.   10.
  1327.       Consider adding intelligence to convers links
  1328.      The idea being that if there are no incoming links, and no local
  1329.      users, that the remote outgoing link would be brought down until
  1330.      this changed.
  1331.  
  1332.   11.
  1333.       Consider moving MSDOS version to curses for screen I/O
  1334.  
  1335.   7.  Known Quirks
  1336.  
  1337.   The following are known minor quirks that have no workaround...
  1338.  
  1339.   1.  The 'ls' command cannot represent disk/free sizes for LARGE disks
  1340.      If you have a file system with more than 4,194,303 blocks (a disk
  1341.      partition greater that 4 GIG), then the 'ls' numbers for disk size
  1342.      and free size will NOT be correct. This cannot be fixed, as the
  1343.      number cannot be represented in a 32 bit 'long' integer.
  1344.      Since this will not normally happen on Linux (except with NFS
  1345.      mounted drives), most Linux users will not even notice it. It
  1346.      cannot normally happen on Linux because the ext2 filesystem will
  1347.      not support partitions greater than 2 GIG.
  1348.  
  1349.   2.  None other at this time.... ;-)
  1350.  
  1351.